import PyInstaller.__main__
import os
import shutil

def build_exe():
    """打包程序为exe文件"""
    print("开始打包程序...")
    
    # 删除之前的构建文件
    if os.path.exists('build'):
        shutil.rmtree('build')
    if os.path.exists('dist'):
        shutil.rmtree('dist')
    
    # PyInstaller参数
    args = [
        'ip_checker.py',  # 主程序文件
        '--name=IP更新器',  # 生成的exe名称
        '--noconsole',    # 不显示控制台窗口
        '--windowed',     # 使用窗口模式
        '--icon=icon.ico',  # 程序图标
        '--add-data=README.md;.',  # 添加数据文件
        '--hidden-import=PIL._tkinter_finder',  # 添加隐藏导入
        '--hidden-import=pystray._win32',
        '--hidden-import=keyboard',  # 添加keyboard库
        '--uac-admin',    # 请求管理员权限（用于全局快捷键）
        '--onefile',      # 打包成单个文件
        '--clean',        # 清理临时文件
        '--noconfirm',    # 不确认覆盖
    ]
    
    # 创建图标文件
    create_icon()
    
    try:
        # 执行打包
        PyInstaller.__main__.run(args)
        print("打包完成！")
        print(f"可执行文件位置: {os.path.abspath('dist/IP更新器.exe')}")
    except Exception as e:
        print(f"打包失败: {e}")

def create_icon():
    """创建程序图标"""
    from PIL import Image, ImageDraw, ImageFont
    
    # 创建图标
    icon_size = 256  # 使用较大尺寸以获得更好的质量
    icon_image = Image.new('RGBA', (icon_size, icon_size), color=(0, 0, 0, 0))
    draw = ImageDraw.Draw(icon_image)
    
    # 绘制渐变背景
    for i in range(icon_size):
        color = (33, 150, 243, int(255 * (1 - i/icon_size)))
        draw.line([(0, i), (icon_size, i)], fill=color)
    
    # 绘制圆形
    padding = icon_size // 16
    draw.ellipse([padding, padding, icon_size-padding-1, icon_size-padding-1], 
                 outline='#2196F3', width=4)
    
    # 添加文字
    try:
        # 尝试使用微软雅黑
        font = ImageFont.truetype("msyh.ttc", icon_size // 4)
    except:
        try:
            font = ImageFont.truetype("arial.ttf", icon_size // 4)
        except:
            font = ImageFont.load_default()
    
    # 绘制文字
    text = "IP"
    text_bbox = draw.textbbox((0, 0), text, font=font)
    text_width = text_bbox[2] - text_bbox[0]
    text_height = text_bbox[3] - text_bbox[1]
    x = (icon_size - text_width) // 2
    y = (icon_size - text_height) // 2
    
    # 添加文字阴影效果
    draw.text((x+2, y+2), text, fill='#1976D2', font=font)  # 阴影
    draw.text((x, y), text, fill='#FFFFFF', font=font)  # 主文字
    
    # 保存为ico文件
    icon_image.save('icon.ico', format='ICO', sizes=[(256, 256), (128, 128), (64, 64), (32, 32), (16, 16)])
    print("图标文件已创建")

if __name__ == "__main__":
    build_exe() 